#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
欢迎记录模型
定义新成员欢迎记录相关的数据库表结构
"""

from sqlalchemy import Column, String, Integer, Text, Boolean, DateTime
from .base import BaseModel, db

class WelcomeRecord(BaseModel):
    """
    新成员欢迎记录模型
    存储群组新成员欢迎的历史记录
    """
    __tablename__ = 'welcome_records'
    
    # 所属账号
    account = Column(String(100), nullable=False, comment='所属账号，逻辑外键关联belong表的id列')
    
    # 群聊名称
    group_name = Column(String(100), nullable=False, comment='群聊名称')
    
    # 群聊ID（逻辑关联，不使用外键）
    group_id = Column(Integer, nullable=True, comment='群聊ID')
    
    # 新成员名称
    member_name = Column(String(100), nullable=False, comment='新成员名称')
    
    # 新成员微信ID
    member_wechat_id = Column(String(100), nullable=True, comment='新成员微信ID')
    
    # 欢迎消息内容
    welcome_message = Column(Text, nullable=False, comment='欢迎消息内容')
    
    # 欢迎消息模板
    message_template = Column(Text, nullable=True, comment='使用的欢迎消息模板')
    
    # 加入方式：invite(邀请), qr_code(扫码), link(链接)
    join_method = Column(String(20), nullable=True, comment='加入方式')
    
    # 邀请人名称
    inviter_name = Column(String(100), nullable=True, comment='邀请人名称')
    
    # 是否发送成功
    is_sent_successfully = Column(Boolean, default=False, nullable=False, comment='是否发送成功')
    
    # 发送状态：pending(待发送), sent(已发送), failed(发送失败), skipped(跳过)
    send_status = Column(String(20), nullable=False, default='pending', comment='发送状态')
    
    # 失败原因
    failure_reason = Column(Text, nullable=True, comment='发送失败原因')
    
    # 重试次数
    retry_count = Column(Integer, default=0, nullable=False, comment='重试次数')
    
    # 处理耗时（毫秒）
    processing_time_ms = Column(Integer, nullable=True, comment='处理耗时（毫秒）')
    
    # 原始系统消息
    original_system_message = Column(Text, nullable=True, comment='原始系统消息')
    
    # 是否为测试记录
    is_test_record = Column(Boolean, default=False, nullable=False, comment='是否为测试记录')
    
    # 注意：使用逻辑关联而非外键关联
    # 可通过 Group.query.filter_by(id=self.group_id).first() 获取关联群组
    
    def __repr__(self):
        return f'<WelcomeRecord(id={self.id}, group="{self.group_name}", member="{self.member_name}", status="{self.send_status}")>'
    
    def get_status_display(self):
        """
        获取状态的中文显示
        
        Returns:
            str: 状态中文描述
        """
        status_map = {
            'pending': '待发送',
            'sent': '已发送',
            'failed': '发送失败',
            'skipped': '跳过发送'
        }
        return status_map.get(self.send_status, self.send_status)
    
    def get_join_method_display(self):
        """
        获取加入方式的中文显示
        
        Returns:
            str: 加入方式中文描述
        """
        method_map = {
            'invite': '邀请加入',
            'qr_code': '扫码加入',
            'link': '链接加入'
        }
        return method_map.get(self.join_method, '未知方式')